home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / Morpion 1.0.0 / source / PNL Libraries / MyOOMenus.unit < prev    next >
Encoding:
Text File  |  1993-12-03  |  6.3 KB  |  266 lines  |  [TEXT/PJMM]

  1. unit MyOOMenus;
  2.  
  3. interface
  4.  
  5.     var
  6.         editEnabled: boolean;
  7.  
  8.     procedure InitOOMenus (defaultproc: procptr);
  9.     procedure FinishOOMenus;
  10.     procedure DoDefaultMenu (themenu, theitem: integer);
  11.     function SetOOMenuBar: boolean;
  12.  
  13. implementation
  14.  
  15.     uses
  16.         Traps, Balloons, MyTypes, MySystemGlobals, MyUtils, MyStrings, MyVersionResource,{}
  17.         BaseGlobals, MyFMenus, MyOOMainLoop, MyOOAboutHelp, AERegistry, MyAEUtils, AEObjects;
  18.  
  19.     const
  20.         about_dialog_ID = 128;
  21.         help_dialog_ID = 129;
  22.         kAEHelp = 'help';
  23.  
  24.     var
  25.         about_object: VerObject;
  26.         help_object: VerObject;
  27.  
  28.     function SetOOMenuBar: boolean;
  29.     begin
  30.         SetOOMenuBar := FrontObject.SetMenuBar;
  31.     end;
  32.  
  33.     procedure MySendEvent (class_id, event_id: AEEventID);
  34.         var
  35.             event, reply: AppleEvent;
  36.             err, junk: OSErr;
  37.             psn: ProcessSerialNumber;
  38.             target: AEDesc;
  39.     begin
  40.         AECreate(reply);
  41.         err := CreateSelfTarget(target);
  42.         err := AECreateAppleEvent(class_id, event_id, target, kAutoGenerateReturnID, kAnyTransactionID, event);
  43.         AEDestroy(target);
  44.         if err = noErr then begin
  45.             junk := AESend(event, reply, kAENoReply + kAEAlwaysInteract, kAENormalPriority, kAEDefaultTimeOut, nil, nil);
  46.         end;
  47.         AEDestroy(event);
  48.         AEDestroy(reply);
  49.     end;
  50.  
  51.     function HandleEditMenu (event, reply: AppleEvent; refcon: longInt): OSErr;
  52.         var
  53.             err: OSErr;
  54.     begin
  55.         FrontObject.DoEditMenu(refcon);
  56.         HandleEditMenu := noErr;
  57.     end;
  58.  
  59.     procedure DoDefaultMenu (themenu, theitem: integer);
  60.         var
  61.             save: grafPtr;
  62.             DAName: str255;
  63.             oe: OSErr;
  64.     begin
  65.         if themenu = M_Apple then begin
  66.             GetPort(save);
  67.             GetItem(GetMHandle(M_apple), theitem, DAName);
  68.             oe := OpenDeskAcc(DAName);
  69.             SetPort(save);
  70.         end
  71.         else if themenu = M_Edit then begin
  72.             if has_AppleEvents then begin
  73.                 case theitem of
  74.                     EMUndo: 
  75.                         MySendEvent(kAECoreSuite, kAEUndo);
  76.                     EMCut: 
  77.                         MySendEvent(kAECoreSuite, kAECut);
  78.                     EMCopy: 
  79.                         MySendEvent(kAECoreSuite, kAECopy);
  80.                     EMPaste: 
  81.                         MySendEvent(kAECoreSuite, kAEPaste);
  82.                     EMClear: 
  83.                         MySendEvent(kAECoreSuite, kAEDelete);
  84.                     EMSelectAll: 
  85.                         MySendEvent(kAECoreSuite, kAESelect); { hmmm }
  86.                     otherwise
  87.                         FrontObject.DoEditMenu(theitem);
  88.                 end;
  89.             end
  90.             else begin
  91.                 FrontObject.DoEditMenu(theitem);
  92.             end;
  93.         end;
  94.     end;
  95.  
  96.     function HandleAbout (event, reply: AppleEvent; refcon: longInt): OSErr;
  97.         var
  98.             err: OSErr;
  99.     begin
  100.         DoAboutHelp(about_object, about_dialog_id);
  101.         HandleAbout := noErr;
  102.     end;
  103.  
  104.     procedure DoAboutMenu;
  105.     begin
  106.         if has_AppleEvents then begin
  107.             MySendEvent(kAECoreSuite, kAEAbout);
  108.         end
  109.         else begin
  110.             DoAboutHelp(about_object, about_dialog_id);
  111.         end;
  112.     end;
  113.  
  114.     function HandleHelp (event, reply: AppleEvent; refcon: longInt): OSErr;
  115.         var
  116.             err: OSErr;
  117.     begin
  118.         DoAboutHelp(help_object, help_dialog_id);
  119.         HandleHelp := noErr;
  120.     end;
  121.  
  122.     procedure DoHelpMenu;
  123.     begin
  124.         if has_AppleEvents then begin
  125.             MySendEvent(kAECoreSuite, kAEHelp);
  126.         end
  127.         else begin
  128.             DoAboutHelp(help_object, help_dialog_id);
  129.         end;
  130.     end;
  131.  
  132.     procedure SetAboutMenu (themenu, theitem: integer);
  133.     begin
  134.         SetAboutHelpMenu(themenu, theitem, about_object);
  135.     end;
  136.  
  137.     procedure SetHelpMenu (themenu, theitem: integer);
  138.     begin
  139.         SetAboutHelpMenu(themenu, theitem, help_object);
  140.     end;
  141.  
  142.     function HandleClose (event, reply: AppleEvent; refcon: longInt): OSErr;
  143.         var
  144.             err: OSErr;
  145.     begin
  146.         if FrontWindow <> nil then begin
  147.             FrontObject.DoClose;
  148.             err := noErr;
  149.         end
  150.         else begin
  151.             err := errAENoSuchObject;
  152.         end;
  153.         HandleClose := err;
  154.     end;
  155.  
  156.     procedure DoClose;
  157.     begin
  158.         if has_AppleEvents then begin
  159.             MySendEvent(kAECoreSuite, kAEClose);
  160.         end
  161.         else begin
  162.             FrontObject.DoClose;
  163.         end;
  164.     end;
  165.  
  166.     procedure SetCloseMenu (themenu, theitem: integer);
  167.         var
  168.             fw: windowPtr;
  169.     begin
  170.         fw := FrontWindow;
  171.         if fw = nil then
  172.             SetIDItemEnable(themenu, theitem, false)
  173.         else
  174.             SetIDItemEnable(themenu, theitem, windowPeek(fw)^.goAwayFlag);
  175.     end;
  176.  
  177.     procedure SetEditMenus (menu, item: integer);
  178.     begin
  179.         FrontObject.SetEditMenuItem(item);
  180.     end;
  181.  
  182.     procedure DoQuit;
  183.     begin
  184.         if has_AppleEvents then begin
  185.             MySendEvent(kCoreEventClass, kAEQuitApplication);
  186.         end
  187.         else begin
  188.             quitNow := true;
  189.         end;
  190.     end;
  191.  
  192. {$S Init}
  193.     procedure InitOOMenus (defaultproc: procptr);
  194.         var
  195.             mh: menuHandle;
  196.             oe, junk: OSErr;
  197.             dummyb: boolean;
  198.             hstr: str255;
  199.             vers: versionRecord;
  200.     begin
  201.         quitNow := false;
  202.         editEnabled := true;
  203.         if defaultproc = nil then
  204.             defaultproc := @DoDefaultMenu;
  205.  
  206.         InitFMenus(defaultproc);
  207.         InitOOAboutHelp(about_object);
  208.         InitOOAboutHelp(help_object);
  209.  
  210.         MH_Apple := GetFMenu(M_Apple);
  211.         AddResMenu(MH_Apple, 'DRVR');
  212.         InsertMenu(MH_Apple, 0);
  213.  
  214.         MH_File := GetFMenu(M_File);
  215.         InsertMenu(MH_File, 0);
  216.         MH_Edit := GetFMenu(M_Edit);
  217.         InsertMenu(MH_Edit, 0);
  218.  
  219.         M_HM_Help_I := -1;
  220.         hstr := GetGlobalString(help_menu_text);
  221.         GetVersion(vers);
  222.         SPrintS3(hstr, hstr, vers.name, '', '');
  223.         if has_HelpMgr and (hstr <> '') then begin
  224.             oe := HMGetHelpMenuHandle(mh);
  225.             if (oe = noErr) and (mh <> nil) then begin
  226.                 AppendMenu(mh, hstr);
  227.                 M_HM_Help_I := CountMItems(mh);
  228.                 AddFCommand(kHMHelpMenuID, M_HM_Help_I, CHelp);
  229.             end;
  230.         end;
  231.  
  232.         if has_AppleEvents then begin
  233.             junk := AEInstallEventHandler(kAECoreSuite, kAEClose, @HandleClose, 0, false);
  234.             junk := AEInstallEventHandler(kAECoreSuite, kAEAbout, @HandleAbout, 0, false);
  235.             junk := AEInstallEventHandler(kAECoreSuite, kAEHelp, @HandleHelp, 0, false);
  236.  
  237.             junk := AEInstallEventHandler(kAECoreSuite, kAEUndo, @HandleEditMenu, EMUndo, false);
  238.             junk := AEInstallEventHandler(kAECoreSuite, kAECut, @HandleEditMenu, EMCut, false);
  239.             junk := AEInstallEventHandler(kAECoreSuite, kAECopy, @HandleEditMenu, EMCopy, false);
  240.             junk := AEInstallEventHandler(kAECoreSuite, kAEPaste, @HandleEditMenu, EMPaste, false);
  241.             junk := AEInstallEventHandler(kAECoreSuite, kAEDelete, @HandleEditMenu, EMClear, false);
  242.             junk := AEInstallEventHandler(kAECoreSuite, kAESelect, @HandleEditMenu, EMSelectAll, false);
  243.         end;
  244.  
  245.         SetFBoth(Cabout, @DoAboutMenu, @SetAboutMenu);
  246.         SetFBoth(Chelp, @DoHelpMenu, @SetHelpMenu);
  247.         SetFBoth(Cclose, @DoClose, @SetCloseMenu);
  248.         SetFCommand(Cquit, @DoQuit);
  249.         SetFSetMenu(Cundo, @SetEditMenus);
  250.         SetFSetMenu(Ccut, @SetEditMenus);
  251.         SetFSetMenu(Ccopy, @SetEditMenus);
  252.         SetFSetMenu(Cpaste, @SetEditMenus);
  253.         SetFSetMenu(Cclear, @SetEditMenus);
  254.         SetFSetMenu(Cselectall, @SetEditMenus);
  255.         SetFMenus;
  256.         dummyb := SetOOMenuBar;
  257.         DrawMenuBar;
  258.     end;
  259.  
  260. {$S Term}
  261.     procedure FinishOOMenus;
  262.     begin
  263.         FinishFMenus;
  264.     end;
  265.  
  266. end.